iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
AI/ ML & Data

粗暴的資料處理 DuckDB系列 第 23

Day23-- DuckDB Style SQL (17) ?

  • 分享至 

  • xImage
  •  

今天延續昨天沒介紹到的另一種 DuckDB macro,table macro

在 DuckDB 中,Table Macro 和 Scalar Macro 有類似的概念,差別在於 Table Macro 回傳的結果是一個完整的表格,而不是單一的值。

簡單來說就是只有 table macro 可以放在 FROM clause 的後面,我們先來試看看,把昨天的 T1 MACRO 放在 FROM 會怎麼樣

CREATE MACRO T1(lol) AS 
lol || 'T1 Fighting!';


SELECT * FROM  T1(' 2024 World ');

DuckDB 馬上噴一個 error 給我們
Catalog Error: Table Function with name t1 does not exist!

Table Macro 的語法

在建立 TABLE Macro,語法和 Scalar Macro 類似,主要差異在於 AS TABLE 這個部分

CREATE MACRO macro_name(parameter1, parameter2, ...) AS TABLE
SELECT ...

我們嘗試來把 T1 改寫成 TABLE Macro

CREATE MACRO T1(lol) AS TABLE
SELECT lol || 'T1 Fighting!' as lol;


SELECT * FROM  T1(' 2024 World ');

我個人覺得 TABLE Macro 和 view 有點像,因為它們都可以用來生成表格並且都能出現在 FROM 子句中。但是它們有一個重要的不同之處

參數化:Table Macro 支援參數,這是它相對於 View 的一個關鍵優勢。我們可以將不同的參數傳入 Table Macro,以生成動態結果,而 View 則不支援這種靈活性。View 則是靜態的,不接受參數。

由於 DuckDB 1.1.0 現在還沒有支援 materialized view,所以我認為,在 DuckDB 中用 Table Macro 是比用 view 更好的選擇


上一篇
Day22 -- DuckDB Style SQL (16) ?
下一篇
Day24-- DuckDB Style SQL (18) ?
系列文
粗暴的資料處理 DuckDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言